package solutions.ferpa.ztest.intf;

import br.com.telescope.adsrt.lib.*;
import br.com.telescope.t2.AccessPolicy;
import br.com.telescope.t2.ServiceModel;
import br.com.telescope.t2.exception.ApplicationRuntimeException;
import br.com.telescope.t2.feature.CustomActionFeature;
import br.com.telescope.util.HashUtil;
import solutions.ferpa.ztest.ent.*;

/**
 * Conversão de senhas.
 * <p>
 * Rotina automatizada que converte as senhas no formato texto para o 
 * respectivo SHA-1.
 * <P>
 * Este processo atualiza a senha hash de todos os usuários que tem uma 
 * senha textual mas não tenham uma senha-hash definida.
 * <P>
 * Pode ser usado em processos de migração ou de carga massiva de 
 * cadastro de usuários.
 * <P>
 * Como o processo não é destrutivo, ele é público e pode ser executado 
 * diretamente sem a necessidade de existir um usuário logado.
 * <P>
 * 
 * <P>
 * Telescope origin: RTAUTH_UTIL.UTL_PASSWORD_HASH
 * <P>
 * @author TELESCOPE - Build task T2 Web Interface Generator
 * <P>
 * @version 0.1
 */
public class UtlPasswordHash extends ServiceModel {
    
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    public static final String GLOBAL_NAME = "RTAUTH_UTIL.UTL_PASSWORD_HASH";
    
    @Override
    public String globalName() {
        return GLOBAL_NAME;
    }
    
    {
        setTitle("Conversão de senhas");
    }
    
    
    // Record items
    
    // Query items
    
    @Override
    public void initAttributes() {
        
    }
    
    @Override
    public String getDefaultOrderBy() {
        return "";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="CUSTOM">
    public class FCustom extends CustomActionFeature {
        
        @Override
        public void initForm() {
        }
        
        @Override
        public int getAccessPolicy() {
            return AccessPolicy.PUBLIC;
        }
        
        @Override
        public void execute() {
            try {
                custom();
            } catch (AdsException ex) {
                throw new ApplicationRuntimeException(ex);
            }
        }
        
        {
            setFeatureName("CUSTOM");
            setPrimary(false);
        }
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="initFeatures">
    
    @Override
    protected void initFeatures() {
        addFeature(new FCustom());
        super.initFeatures();
    }
    
    @Override
    public String getDefaultFeature() {
        return "CUSTOM";
    }
    // </editor-fold>
    
    // <editor-fold defaultstate="collapsed" desc="Getters and Setters">
    // </editor-fold>
    
    /**
     * null.
     */
    public void custom() throws AdsException {
        // <user-code id="2209194" parentId="2209188" hashcode="1066413" length="430">
        // import br.com.telescope.util.HashUtil;
        EntUsuarios usua = new EntUsuarios(ctx);
        int count = 0;
        while (usua.next()) {
            if (usua.getSenha().isNotNull() && usua.getSenhaHash().isNull()) {
                usua.setSenhaHash(HashUtil.getSha1(usua.valueOfSenha()));
                usua.upd();
                ctx.p("Gerada senha para " + usua.valueOfLogin() + "<br>");
                count++;
            }
        }
        usua.close();
        ctx.p(count + " senhas geradas!");
        // </user-code>
    }
}
